<html>
    <head>
        <title>替换接口的实现</title>
    </head>
    <body>
        <script>
            /*
                    一、替换接口的实现

                                    如果给定的服务定义了一个接口，比如IdentityUserAppService类实现了IIdentityUserAppService，

                                    可以重新实现相同的接口并用你的类替换当前的实现。
                                    
                                    示例：

                                                // 自己重新实现一个IIdentityUserAppService接口
                                                public class MyIdentityUserAppService : IIdentityUserAppService, ITransientDependency
                                                {
                                                    //...
                                                }

                                    MyIdentityUserAppService通过命名约定替换IIdentityUserAppService（因为两端都有IdentityUserAppService）。

                                    如果你的类名不匹配，你需要手动公开服务接口：

                                                [ExposeServices(typeof(IIdentityUserAppService))]  // 手动暴露接口实现
                                                public class TestAppService : IIdentityUserAppService, ITransientDependency
                                                {
                                                    //...
                                                }

                                    依赖注入系统允许为同一个接口注册多个服务。

                                    注入接口时使用最后一个注册的。显式替换服务是一个很好的做法。

                                                [Dependency(ReplaceServices = true)]  // 替换服务
                                                [ExposeServices(typeof(IIdentityUserAppService))]  // 暴露到哪个接口
                                                public class TestAppService : IIdentityUserAppService, ITransientDependency
                                                {
                                                    //...
                                                }

                                    这样，系统中将只有一个IIdentityUserAppService的实现，而它不会改变这种情况下的结果。
                                    
                                    也可以通过代码替换服务：

                                                context.Services.Replace(
                                                    ServiceDescriptor.Transient<IIdentityUserAppService, MyIdentityUserAppService>()
                                                );

                                                你可以将其写入模块的ConfigureServices方法中。
                            
                */
        </script>
    </body>
</html>